package com.atguigu.gmall.activity.service;

import com.atguigu.gmall.activity.model.UserRecode;
import com.atguigu.gmall.common.result.Result;
import com.atguigu.gmall.order.model.OrderInfo;

import java.util.Map;

public interface SeckillBizService {

    /**
     * 生成用户秒杀商品抢购码
     *
     * @param userId
     * @param skuId
     * @return
     */
    String getSeckillBuyCode(String userId, Long skuId);


    /**
     * 秒杀请求入队（将秒杀意向发送MQ就结束）
     *
     * @param userId
     * @param skuId
     * @param buyCode
     */
    void seckillOrderToQueue(String userId, Long skuId, String buyCode);

    /**
     * 处理用户秒杀请求
     * @param userRecode
     */
    void processSeckillRequest(UserRecode userRecode);

    /**
     * 扣减秒杀商品库存
     * @param skuId
     */
    void processDeductStock(Long skuId);

    /**
     * 检查当前用户秒杀商品结果
     * @param userId
     * @param skuId
     * @return
     */
    Result checkSeckillResult(String userId, Long skuId);

    /**
     * 汇总秒杀订单确认页面数据汇总
     * @param userId 用户ID
     * @param skuId 秒杀商品ID
     * @return
     */
    Map<String, Object> getSeckillOrderTradeData(String userId, Long skuId);

    /**
     * 保存秒杀订单
     * @param orderInfo
     * @return
     */
    Long submitSeckillOrder(OrderInfo orderInfo);

    /**
     * 清理秒杀缓存
     */
    void processSeckillClean();
}
